#ifndef __INPUT_DIR_H__
#define __INPUT_DIR_H__

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/input.h>
#include <tslib.h>
#include <sys/ioctl.h>
#include <sys/socket.h>   
#include <netinet/in.h>   
#include <unistd.h>   
#include <errno.h>   
#include <pthread.h>


#define INPUT_TYPE_TOUCH 1
#define INPUT_TYPE_NET 2

#define BUF_LEN 20



typedef struct Input_data{
	int INPUT_TYPE;
	struct tsdev * ts;
	int ix;
	int iy;
	int ipressure;
	struct timeval tv;
	char net_data[1024];
}Input_data,*pInput_data;


static int range_w = 0;
static int range_r = 0;
static Input_data range_buf[BUF_LEN];
pthread_mutex_t range_rw_mutex;
pthread_cond_t range_rw_cond;


typedef struct Input_dev{
	char* name;
	char* dir_name;
	pInput_data idata;
	int (*bind_dir)(char* name);
	int (*init_dev)(void);
	int (*exit_dev)(void);
	void (*flash_input_data)(void);
	pInput_data (*get_input_data)(void);
	struct Input_dev * next;
}Input_dev,*pInput_dev;

typedef struct Input_dir{
	char* name;
	char* dev_name;
	pInput_dev pcurrent_dev;
	void (*find_dev)(struct Input_dir * current_dir,char* name);
	int (*bind_dev)(struct Input_dir * current_dir,char* name);
	int (*init_dev)(struct Input_dir * current_dir);
	int (*exit_dev)(struct Input_dir * current_dir);
	pInput_data (*get_current_data)(struct Input_dir * current_dir);
	void * (*pthread_fun)(void * arg);

	struct Input_dir * next;
}Input_dir,*pInput_dir;

extern pInput_dev head_input_dev;

void current_find_dev(struct Input_dir * current_dir,char * name);

int current_bind_dev(struct Input_dir * current_dir,char* name);

int current_init_dev(struct Input_dir * current_dir);

int current_exit_dev(struct Input_dir * current_dir);

pInput_data get_current_input_data(struct Input_dir * current_dir);

void * current_pthread_fun(void * arg);

void Input_dir_copy(pInput_dir head, int cnt);

void add_all_input_div_dev();


#endif
